從基本層面來看,一個 鏈結串列 是一個以自身不存在或其組成定義的遞迴資料結構。串列要么是 空的 (以 []);要麼由一個 頭部 包含單一值,以及一個 尾部 而該尾部本身也是一個完整的串列。
1. 遞迴定義
透過將尾部定義為「它本身即是一個串列」,我們允許無限嵌套。這可由以下構造方式說明: [ 1 | [ 2 | [ 3 | [ ] ] ] ],其中每個管道運算子(|)將立即值與剩餘結構分隔開來。
2. 原始結構與抽象層
Erlang 虛擬機(BEAM)中的原始串列是簡單的結構。像 List.flatten/1 之類的行為 都是由 Elixir 的串列模組提供的抽象層 。原始資料結構並不知道如何自行展平;此邏輯是由模組提供,用以遍歷嵌套的頭部與尾部。
3. 「套娃」比喻
可以把鏈結串列想像成一套俄羅斯套娃。最外層的娃娃就是 頭部。當你打開它時,會發現恰好只有一樣東西:另一個娃娃(也就是 尾部)。只有當你打開最後一個、最小的娃娃時,才會發現裡面什麼都沒有,進而達到 空 的狀態。
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>